package com.cjj.learning.queue;

import java.time.Instant;
import java.util.Scanner;

/**
 * @ClassName DataStructure_2
 * @Description 队列
 * @Date 2021/03/19 10:29:53
 * @Created by ccc-j
 * @email ccc-ju@outlook.com
 */
public class ArrayQueue {

    public static void main(String[] args) {
        Queue queue = new Queue(3);
        char key = ' ';
        Scanner scanner = new Scanner(System.in);
        boolean loop = true;
        // 输出菜单
        while (loop){
            System.out.println("S：显示队列");
            System.out.println("E：退出程序");
            System.out.println("A：添加数据");
            System.out.println("G：取出数据");
            System.out.println("H：查看对头");
            key = scanner.next().charAt(0); // 接收一个字符
            switch (key){
                case 'S':
                    queue.showQueue();
                    break;
                case 'A':
                    queue.showQueue();
                    break;
            }
        }
    }

}

class Queue{
    private int maxSize; // 数组的最大容量
    private int front; //队列头
    private int rear; //队列尾
    private int[] arr; //该数组用于存储数据，模拟队列

    // 创建队列的构造器
    public Queue(int maxSize){
        maxSize = maxSize;
        arr = new int[maxSize];
        front = -1; //指向队列头部，指向队列前一个位置
        rear = -1;  //指向队列尾部
    }

    // 判断队列是否满
    public boolean isFull(){
        return rear == maxSize - 1;
    }

    // 判断队列是否为空
    public boolean isEmpty(){
        return front == rear;
    }

    // 添加数据到队列
    public void addQueue(int n){
        // 判断队列是否满
        if(isFull()){
            System.out.println("队列满，不能加入数据!");
            return;
        }
        rear++; // 让rear后移
        arr[rear] = n;
    }

    // 数据出队列
    public int getQueue(){
        // 判断队列是否空
        if(isEmpty()){
            throw new RuntimeException("队列空，不能取数据!");
        }
        front++; // front后移
        return arr[front];
    }

    // 显示队列所有数据
    public void showQueue(){
        if(isEmpty()){
            System.out.println("队列空!");
            return;
        }
        for(int i = 0; i < arr.length; i++){
            System.out.printf("arr[%d] = %d \t", i, arr[i]);
        }
        System.out.println();
    }

    // 显示队列头的数据，不是取数据
    public int headQueue(){
        // 判断队列是否为空
        if(isEmpty()){
            throw new RuntimeException("队列空!");
        }
        return arr[front + 1];
    }
}
